package com.yh.mybatis.reflection.factory;

import java.util.List;
import java.util.Properties;

/**
 * 对象接口工厂
 *
 * @author yh
 * @date 2023/09/27
 */
public interface ObjectFactory {

    /**
     * 设置属性
     *
     * @param properties 特性
     */
    void setProperties(Properties properties);

    /**
     * 生产对象
     *
     * @param type 类型
     * @return {@link T}
     */
    <T> T create(Class<T> type);

    /**
     * 生产对象， 使用指定的构造函数和构造函数对象
     *
     * @param type                类型
     * @param constructorArgTypes 构造函数arg类型
     * @param constructorArgs     构造函数参数
     * @return {@link T}
     */
    <T> T create(Class<T> type, List<Class<?>> constructorArgTypes, List<Object> constructorArgs);


    /**
     * 返回这个对象是否为集合，为了支持
     *
     * @param type 类型
     * @return boolean
     */
    <T> boolean isCollection(Class<T> type);
}
